【URP12以降】Built-in Shader を URP 環境で使用できるShaderに自動変換

October 07, 2022


公式サイトを参照

URPプロジェクトにてURPを利用していないサンプルプロジェクトを導入して開いた時、 ワールド全体が紫の蛍光カラーになっている事があると思います

URP12前は Edit → Renderer 項目の中からShaderをURPにコンバートできましたが、URP12から変換方法が変わったようです

コンバート方法

**WIndow → Rendering → Render Pipeline Converter ** を選択します

D6CDA0D87D6A7620CEAED304A368D12A

まずはプロジェクトタイプによったコンバート方法を選択します 8EF3303FF2D6B1379AA49E94FC7ED2AE

それぞれの選択肢は以下です

|名前| |Convert Build-in to 2D(URP)|Built-in Render Pipeline 2D から URP 2D にマテリアルを変換します| |Built-in Render Pipeline 2D (URP) Asset|2DアセットをURP12以降のアセットに変換 URP12以前に利用されていたParametricライトをFreeformライトに変換します |https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@12.0/manual/LightTypes.html| |Built-in to URP|Build-in Render Pipeline で利用されていたアセットをURPに変更します

  • Rendering Settings
    • URPの設定がない場合必要なアセットも作成します
  • Material
  • AnimationClip
  • Read-only Material COnverter|

今回、マテリアルを更新するには Built-in to URP を選択します

次に変換する内容ですが、今回の例ではMaterialのShaderを変換したいため MaterialUpgrade、Readonly Material Converter のみをチェック入れる形で問題ありません

今回は試しに全チェックを入れて Initialize Converters (DryRunを行い、実際にコンバートは行いません)を押してみます

A74F684AC3FAEA38CA968B9E32264E79

Materialの箇所のみ変更対象が表示されました ここから実際に変換を行うマテリアルにはチェックON、しないものはチェックを外します

A87E5ACF0FE6CAFAE9BB13B8574F924F

StantardシェーダーがConvertされ紫の表示箇所が問題なくなりました

5E82DF40E4BE54644CCC42EBE2E47969 F750921D0CC454A478FCA174C4AEDFE5

その他

コンバートあと、いくつかのマテリアルがエラー表示になっていました 3C81C4D6079175AE33F3DB9D3FD62BF0

Unlit/Transparent Shaderを利用しているマテリアルのようです

BEAFBE906E11DA5810FC79BDB3538F37

しかしこれはURP環境でも引き続き利用できるため変換不要(変換先がない)のでコンバートされなかったと思われます

URP15からはさらに変換されるオプションが増える予感です

また、スクリプトからコンバート実行できるためバッチ処理が出きるようです

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Rendering.Universal;
using UnityEngine;

public class MyUpgradeScript : MonoBehaviour
{
    public static void ConvertBuiltinToURPMaterials()
    {
				// Material & ReadonlyMaterial をコンバート
        Converters.RunInBatchMode(
            ConverterContainerId.BuiltInToURP
            , new List<ConverterId> {
                ConverterId.Material,
                ConverterId.ReadonlyMaterial
            }
            , ConverterFilter.Inclusive
        );
        EditorApplication.Exit(0);
    }
}

次のように実行します

"<path to Unity application> -projectPath <project path> -batchmode -executeMethod MyUpgradeScript.ConvertBuiltinToURPMaterials